if BEAKL Wi-v is a variant of BEAKL Wi, then..
is the logical extension of it to the extreme, moving the Z to the pinkie home row and the X to the ring finger reach of the pinkie top row. The Stagger key on this layout cycles through the two pinkie staggered variants and the familiar home row BEAKL Wi layout.
It is the logical conclusion of BEAKL pinkie finger avoidance, penalizing the home row as a pinkie reach—from the pinkie stagger position of BEAKL Wi-v—in deference to the ring finger reach to the corner X. This is a layout designed specifically for elbows to side, arms extended, palms down (resting) lap top typing.
This is not to be confused with “laptop” keyboard (computer) typing which would place the keyboard section much closer to the hips when resting on one’s lap, thus, changing the hand position and reach of the pinkies—extending—considerably. BEAKL Wi would be the layout of choice here, illustrating how the slightest changes in hand positioning affect the optimal layout.
using the same keyboard evaluator, the former pinkie top row penalties are swapped with the variant’s home row weighting assignments..
[weights]
10.0 7.0 2.0 1.0 1.0 4.0 4.0 1.0 1.0 2.0 7.0 10.0
16.0 12.0 1.0 0.5 0.5 1.5 1.5 0.5 0.5 1.0 12.0 16.0
9.0 5.0 2.5 2.0 1.5 5.0 5.0 1.5 2.0 2.5 5.0 9.0 // rest pinkie on lower row of corne!
0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
and correspondingly mapping the thumb to pinkie row penalties..
[penalties]
,same_row,row_jump1,row_jump2,row_jump3
ii, 2.5, 3.5, 4.5, 0.0 // same finger
im, 0.5, 1.0, 2.0, 0.0
ir, 0.5, 1.0, 1.5, 0.0
ip, 0.5, 1.0, 1.5, 0.0
mi, -1.5, -0.5, 1.5, 0.0 // inward roll
mm, 2.5, 3.5, 4.5, 0.0 // same finger
mr, 0.5, 1.0, 2.0, 0.0
mp, 1.0, 1.5, 2.5, 0.0
ri, -1.5, -0.5, 1.5, 0.0 // inward roll
rm, 1.0, 1.5, 2.5, 0.0 // inward roll
rr, 3.0, 4.0, 5.0, 0.0 // same finger
rp, 3.0, 4.5, 7.0, 0.0
pi, -1.0, 0.0, 1.0, 0.0 // inward roll
pm, 1.0, 2.0, 3.0, 0.0 // inward roll
pr, 4.0, 5.0, 6.5, 0.0 // inward roll
pp, 5.0, 6.0, 8.0, 0.0 // same finger
it, 0.5, 1.5, 0.5, 1.0
ti, 0.5, 1.5, 0.5, 1.0
mt, 0.5, 1.5, 0.5, 1.0
tm, 0.5, 1.5, 0.5, 1.0
rt, 0.5, 1.5, 0.5, 1.0
tr, 0.5, 1.5, 0.5, 1.0
pt, 0.5, 0.5, 1.5, 1.0 // lazy pinkie position
tp, 0.5, 0.5, 1.5, 1.0 // lazy pinkie position
tt, 2.0, 3.0, 2.0, 2.5 // same finger
yielding the following comparison..
en | fr | es | de | |
---|---|---|---|---|
BEAKL Wi-x | 38.95 | 39.85 | 40.48 | 43.19 |
BEAKL Wi-v | 39.12 | 40.33 | 40.10 | 41.39 |
BEAKL Wi | 41.06 | 42.00 | 41.85 | 43.29 |
BEAKL Zi | 43.74 | 39.40 | 39.98 | 45.88 |
BEAKL 15 | 52.82 | 55.98 | 47.03 | 52.49 |
BEAKL 19bis | 65.90 | 56.76 | 51.12 | 61.70 |
BEAKL 19 | 66.85 | 64.31 | 52.50 | 58.01 |
BEAKL 19 Opt French | 67.66 | 48.18 | 45.38 | 67.22 |
qgmlwyfub | 70.78 | 69.24 | 60.08 | 71.78 |
Carpalx | 71.03 | 70.03 | 60.71 | 73.94 |
Neo | 72.19 | 91.77 | 76.81 | 72.08 |
Minimak-8key | 76.06 | 90.39 | 93.77 | 68.93 |
Oneproduct | 89.08 | 86.94 | 73.59 | 94.57 |
Norman | 89.48 | 90.54 | 93.95 | 80.42 |
Hands down | 90.52 | 110.54 | 110.59 | 85.33 |
MTGAP “shortcuts” | 90.55 | 102.43 | 85.87 | 94.17 |
Kaehi | 92.21 | 100.52 | 87.22 | 102.13 |
MTGAP “ergonomic” | 92.76 | 96.40 | 92.95 | 77.66 |
MTGAP | 93.14 | 104.93 | 88.30 | 99.14 |
Three | 93.32 | 105.30 | 99.34 | 78.14 |
Colemak DHm | 94.47 | 99.44 | 113.78 | 72.14 |
ASSET | 94.56 | 107.07 | 109.78 | 93.58 |
Colemak DHm mod | 94.79 | 91.42 | 113.78 | 72.14 |
Notarize | 95.09 | 107.66 | 112.59 | 91.35 |
Colemak | 95.12 | 99.35 | 114.00 | 74.14 |
MTGAP “standard” | 95.40 | 98.55 | 95.60 | 78.86 |
Soul mod | 95.54 | 100.80 | 115.17 | 70.43 |
MTGAP 2.0 | 96.17 | 99.14 | 94.59 | 75.86 |
Workman | 96.48 | 111.28 | 113.52 | 91.63 |
Colemak DH | 96.74 | 102.60 | 117.00 | 73.76 |
Azerty | 97.90 | 106.25 | 104.91 | 91.18 |
Niro mod | 98.24 | 104.50 | 119.55 | 75.25 |
MTGAP “Easy” | 98.88 | 110.64 | 113.08 | 88.62 |
Dvorak | 99.71 | 119.29 | 120.94 | 95.38 |
Qwerty | 100.00 | 112.45 | 111.78 | 92.29 |
Qwertz | 100.87 | 110.90 | 114.28 | 91.14 |
White | 101.23 | 113.65 | 112.86 | 92.62 |
Bépo 40% | 114.55 | 105.86 | 120.00 | 122.90 |
Qwpr | 115.32 | 136.45 | 135.54 | 124.31 |
Bépo keyberon | 117.34 | 105.15 | 120.07 | 125.61 |
Coeur | 120.27 | 100.73 | 112.57 | 122.80 |
Penalizing the home row pinkie severely alters the rankings considerably. The core BEAKL weightings maintain the rankings for layouts that avoid pinkie finger usage, while several other layouts end up placing lower than the QWERTY layouts—again emphasizing the extreme constraints of this layout design.
The keyboard layout evaluator always sets QWERTY as the baseline at 100.00 and all other layouts relative to this. It is interesting that each of the BEAKL Wi iterations further separate themselves from the pack, the scores improving successively—from 45.43 to 42.88 to 38.95. This is due, of course, to the unique weighting and penalty scheme applied for each iteration to reflect the objectives of the layout—but interesting nonetheless. There may, after all, be a correlation to the “comfort” level of the layout.
in theory, with the above pinkie finger weightings, the Q should have benefited with a move to the upper corner as the X—this does in fact bear out with the even better keyboard evaluator ranking!
However, in practice, the QU pinkie-index finger roll avoids the more awkward ring-index finger roll extension. Hence, the Q remains on the home row for the pinkie finger—an example of biomechanics over calculated numbers. YMMV.
while there are six possible Z V X character combinations, only Z V X (BEAKL Wi), Z X V (BEAKL Wi-v) and X Z V are suitable layout candidates with the V as the pinkie home position on the home row or stagger (bottom) row.
A simple modification to the keymap file and associated layouts allows toggling all three pinkie finger combinations with keycodes..
enum keyboard_keycodes {
BASE = SAFE_RANGE
...
,STAGGER // cycle pinkie home row stagger 0 -> 1 -> 2
,HOME3 // <pinkie>
,HOME2 // pseudo GUI_T(<pinkie>)
,HOME1 // <pinkie>
,KEY3 // <pinkie>
,KEY2 // <pinkie>
,KEY1 // <pinkie>
,SHIFT3 // SFT(<pinkie>)
,SHIFT2 // SFT(<pinkie>)
,SHIFT1 // SFT(<pinkie>)
...
referencing a keycode array..
static uint16_t pinkies[][3] = { {KC_X, KC_V, KC_Z}, // ZVX beakl wi (row 3 -> 1)
{KC_V, KC_X, KC_Z}, // ZXV beakl wi-v
{KC_V, KC_Z, KC_X} }; // XZV beakl wi-x
static uint8_t stagger = PINKIE_STAGGER;
#define PINKIE(r) pinkies[stagger][r - 1]
bool process_record_user(uint16_t keycode, keyrecord_t *record)
{
switch (keycode) {
...
case HOME3:
mod_roll(record, 0, PINKIE(3), 9); return false;
case HOME2:
mod_roll(record, KC_RGUI, PINKIE(2), 9); break;
case HOME1:
mod_roll(record, 0, PINKIE(1), 9); return false;
case KEY3:
send(record, NOSHIFT, PINKIE(3)); break;
case KEY2:
send(record, NOSHIFT, PINKIE(2)); break;
case KEY1:
send(record, NOSHIFT, PINKIE(1)); break;
case SHIFT3:
send(record, SHIFT, PINKIE(3)); break;
case SHIFT2:
send(record, SHIFT, PINKIE(2)); break;
case SHIFT1:
send(record, SHIFT, PINKIE(1)); break;
...
whose letter combinations can be cycled from the Stagger key..
case STAGGER:
if (KEY_DOWN) { stagger = stagger == 0 ? 1 : (stagger == 1 ? 2 : 0); } break;
...
with an initial config.h setting..
// initial pinkie stagger position (0) beakl wi home row (1) wi-v stagger (2) wi-x stagger
#define PINKIE_STAGGER 2
Cycling through the three pinkie letter combinations allows tuning the layout dependent on one’s hand positioning for typing. The left hand pinkie column remains fixed—the J already in the stagger position (bottom row) and the QU bigram roll favouring the Q on the home row.
the Z on the home row is strikingly unusual. While the path to this layout long ago placed the Q on the opposite hand pinkie home row, there is a pleasing unintentional symmetry to this arrangement of the two least used letters.
It is an interesting experiment. And if anything, illustrates how many variables there are to keyboard layout design when one considers keyboard placement, single or split, column stagger (angle and tenting), hand separation and individual biomechanics. Not to mention the “feel” keyboard hardware components—keyswitch design, spring resistance, keycap material and profiles—impart.
Quite obviously, this layout only works for hands which find the ring finger corner reach for X preferable to a pinkie finger reach to the home row for the letter—with palms down typing i find the ring finger reach avoids the subtle upward hand position shift required for the pinkie reach, as well as, being the naturally stronger finger. YMMV as to whether this layout feels better than BEAKL Wi or its variant BEAKL Wi-v.
This layout is growing on me but given the frequency of the X and Z letters it is hardly an obvious choice—which is also reflected in the metrics above—though, for this set of hands, the increased comfort level is unmistakable. A typing corpus emphasizing these letters renders the distinction. Of the small set of words containing Z, there are a number containing ZZ which clearly illustrate how much weaker the pinkie is to the other fingers. The X by comparison does not suffer such words (in English) unless one is in the habit of typing Roman numerals.
i am using this layout now. It capitalizes on the finger memory instilled by BEAKL Zi, so feels strongly familiar.. only better this second time around. Barring further tweaks to this layout (who am i kidding :-), i may finally have found a layout for all seasons..
migrate sources for BEAKL Wi-x to BEAKL Wi-v and BEAKL Wi. All that is required is to set the STAGGER in the config.h accordingly for each.